package pe.edu.upc.dai.grupo4.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dai.grupo4.model.LibroBancos;
import pe.edu.upc.dai.grupo4.utils.ConnectionUtils;
import pe.edu.upc.dai.grupo4.utils.DaoException;

/**
 *
 * @author Luis Flores
 */
public class LibroBancosDaoImpl implements LibroBancosDao {

    public List<LibroBancos> selectPorBancoConciliados(int Anio, int Mes, int CodBanco, int NroCuenta) {
        List<LibroBancos> result = new ArrayList<LibroBancos>();
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("{call dbo.usp_Consulta_Conciliacion_x_codBanco(?,?,?,?,?,?)}");
            st.setInt(1, Anio);
            st.setInt(2, Mes);
            st.setInt(3, CodBanco);
            st.setInt(4, NroCuenta);
            st.setInt(5, 1);
            st.setInt(6, 2);
            rs = st.executeQuery();

            while (rs.next()) {
                result.add(this.getData(rs));
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return result;
    }

    public List<LibroBancos> selectPorBancoPendientes(int Anio, int Mes, int CodBanco, int NroCuenta) {
        List<LibroBancos> result = new ArrayList<LibroBancos>();
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("{call dbo.usp_Consulta_Conciliacion_x_codBanco(?, ?, ?, ?, ?, ?)}");
            st.setInt(1, Anio);
            st.setInt(2, Mes);
            st.setInt(3, CodBanco);
            st.setInt(4, NroCuenta);
            st.setInt(5, 0);
            st.setInt(6, 2);
            rs = st.executeQuery();

            while (rs.next()) {
                result.add(this.getData(rs));
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return result;
    }

    private LibroBancos getData(ResultSet rs) throws SQLException {
        LibroBancos result = null;
        result = new LibroBancos(
                rs.getInt("Año"),
                rs.getInt("Mes"),
                rs.getString("CuentaContable"),
                rs.getInt("NumComprobante"),
                rs.getInt("Item"),
                rs.getInt("CodTipoMovimientoContable"),
                rs.getDate("Fecha"),
                rs.getInt("TipoDocumentoContable"),
                rs.getString("Documento"),
                rs.getString("Glosa"),
                rs.getBoolean("lDebeHaber"),
                rs.getDouble("nImporte"),
                rs.getInt("AñoConciliacion"),
                rs.getInt("MesConciliacion"),
                rs.getInt("SecuenciaConciliacionPeriodo"),
                rs.getDouble("debe"),
                rs.getDouble("haber"));
        return result;
    }
}
